package com.itheima.edu.info.manager.controller;

import com.itheima.edu.info.manager.domain.Student;
import com.itheima.edu.info.manager.util.AgeUtil;

//客服类
public class StudentController extends BaseStudentController{

    //学生管理系统菜单展示功能
    public void start() {
        while (true) {
            System.out.println("--------欢迎登陆学生管理系统-------");
            System.out.println("1 添加学生");
            System.out.println("2 删除学生");
            System.out.println("3 修改学生");
            System.out.println("4 查看学生");
            System.out.println("5 退出");
            System.out.println("请输入您的选择");
            //定义变量接收键盘录入值
            int choice = sc.nextInt();
            switch (choice) {
                case 1:
                    //添加学生方法
                    addStudent();
                    break;
                case 2:
                    //删除学生方法
                    deleteStudent();
                    break;
                case 3:
                    //修改学生功能
                    updateStudent();
                    break;
                case 4:
                    //查询学生信息
                    findAllStudent();
                    break;
                case 5:
                    System.out.println("感谢您的使用");
                    return;
            }
        }
    }

    //客服类中添加学生功能
    private void addStudent() {
        //1. 让用户录入要添加的学生信息
        System.out.println("请输入学生学号");
        String id = inputStudent(false);

       /* System.out.println("请输入学生姓名");
        String name = sc.next();
        System.out.println("请输入学生年龄");
        String age = sc.next();
        System.out.println("请输入学生出生日期");
        String birthday = sc.next();

        //2. 将用户录入的学生信息封装成一个学生对象
        Student stu = new Student();
        stu.setId(id);
        stu.setName(name);
        stu.setAge(age);
        stu.setBirthday(birthday);*/

        //调用方法键盘录入学生信息 封装学生对象
        Student stu = inputStudentInfo(id);

        boolean result = service.addStudent(stu);

        //4. 根据业务员返回的结果组织对应的展示信息给用户
        if (result) {
            System.out.println("添加成功");
        } else {
            System.out.println("添加失败");
        }

    }

    //客服类中的删除学生功能
    private void deleteStudent() {
        Student[] stus = service.findAllStudent();
        if (stus == null){
            System.out.println("当前系统无数据!请添加后重试");
            return;
        }
        //1. 让用户输入要删除的学生学号
        System.out.println("请输入要删除的学生学号");

        String deleteId = sc.next();

        //2. 指挥业务员去干删除的业务
        boolean result = service.deleteStudent(deleteId);

        //3. 给出删除结果提示信息
        if (result) {
            System.out.println("删除成功");
        } else {
            System.out.println("删除失败,请确保要删除的学生学号是存在!");
        }
    }

    //客服类中的修改学生功能
    private void updateStudent() {
        //指挥业务员把系统中的数据全部查到
        Student[] stus = service.findAllStudent();
        //有数据,就展示数据
        if (stus == null){
            //没有数据,提示当前系统无数据,添加后重试!
            System.out.println("当前系统无数据!请添加后重试");
            return;
        }
        //拿到要修改的学生学号
        System.out.println("请输入要修改的学生学号");
        /*String updateId;
        while (true){
            updateId = sc.next();

            效验用户输入的学号是否存在
                存在:让代码往下继续
                不存在:提示学号不存在,请重新输入

            //指挥业务员效验本次录入的学号是否存在
            boolean falg = service.isExists(updateId);
            //如果返回的是false,则表示学号不存在,这时候提示:学号不存在,请重新录入
            if (!falg){
                System.out.println("当前学号不存在,请重新录入");
            }else{
                break;
            }
        }*/
        String updateId = inputStudent(true);
        /*//拿到要修改的学生信息
        System.out.println("请输入学生姓名");
        String name = sc.next();
        System.out.println("请输入学生年龄");
        String age = sc.next();
        System.out.println("请输入学生s生日");
        String birthday = sc.next();

        //封装学生对象
        Student newStu = new Student();
        newStu.setId(updateId);
        newStu.setName(name);
        newStu.setAge(age);
        newStu.setBirthday(birthday);*/
        //调用方法键盘录入学生信息 封装学生对象
        Student newStu = inputStudentInfo(updateId);
        //指挥业务员进行修改学生的业务处理
        boolean result = service.updateStudent(updateId,newStu);
        //根据业务员返回的结果,来组织用户的最终提示信息
        if (result){
            System.out.println("修改成功");
        }else{
            System.out.println("修改失败!请确保要修改的学生学号存在!");
        }
    }

    //客服类中查看学生功能
    public void findAllStudent() {
        //指挥业务员把系统中的数据全部查到
        Student[] stus = service.findAllStudent();
        //判断数组里面是否有数据

        //有数据,就展示数据
        if (stus != null) {
            //遍历系统数据,将每一个学习信息打印到控制台,展示给用户
            //2.1 展示数据之前,展示表头数据
            //1.遍历系统数据,将每一个学生信息打印到控制台,展示给用户
            System.out.println("学号\t\t姓名\t年龄\t生日");
            //2.2 再来遍历容器,展示学生信息
            for (int i = 0; i < stus.length; i++) {
                //拿到每一个学生信息
                Student stu = stus[i];
                //输出当前学生信息
                if (stu != null) {
                    System.out.println(stu.getId() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t\t" + stu.getBirthday());
                }
            }
        } else {
            System.out.println("当前系统无数据,请添加重试");
        }
    }


    //抽取一个方法,专门来做键盘录入学号并返回一个可用学号

    //flag:方法的开关 true表示希望得到一个存在的学号  false表示希望的得到一个不存在的学号
    public String inputStudent(boolean flag){
        String id;
        while (true){
            id = sc.next();
            //指挥业务员效验本次录入的学号是否存在
            boolean exists = service.isExists(id);
            if (exists == flag){
                break;
            }else{
                System.out.println("当前学号不可用,请重新录入");
            }
        }
           return id;
    }

    //抽取一个方法,用于键盘录入学生信息,封装学生对象并返回
    public Student inputStudentInfo(String id){
        System.out.println("请输入学生姓名");
        String name = sc.next();
        /*System.out.println("请输入学生年龄");
        String age = sc.next();*/
        System.out.println("请输入学生出生日期");
        String birthday = sc.next();

        //调用年龄工具类,根据出生日期计算年龄
        String age = AgeUtil.getAge(birthday);

        //2. 将用户录入的学生信息封装成一个学生对象
        Student stu = new Student();
        stu.setId(id);
        stu.setName(name);
        stu.setAge(age);
        stu.setBirthday(birthday);

        //返回封装好的学生对象
        return stu;
    }
}
